import java.sql.Connection;
import java.util.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author debroizr
 */
public class Suppression {

    public static void suppression(Connection conn) throws SQLException, ParseException {

        int actionSuppression;

        boolean exit = false;

        while (!exit) {
            System.out.println("\n*** Choisir une action a effectuer : ***");
            System.out.println("0 : Quitter");
            System.out.println("1 : Suppression d'un vol de passager");
            System.out.println("2 : Suppression d'un vol de fret");
            System.out.println("3 : Suppression de la réservation d'un client sur un vol passager");
            System.out.println("4 : Suppression de la réservation d'un client sur un vol de fret");
            System.out.println("5 : Suppression d'un personnel de vol (hotesse)");
            System.out.println("6 : Suppression d'un personnel de vol (pilote)");
            System.out.println("7 : Retour\n");

            actionSuppression = LectureClavier.lireEntier("Votre choix ?\n");
            switch (actionSuppression) {
                case 0:
                    exit = true;
                    conn.close();
                    System.out.println("\nAu revoir");
                    System.exit(0);
                    break;
                case 1:
                    System.out.println("\nSupprimer un vol passager");
                    supprimerVolPassager(conn);
                    break;
                case 2:
                    System.out.println("\nSupprimer un vol de fret");
                    supprimerVolFret(conn);
                    break;
                case 3:
                    System.out.println("\nSupprimer la réservation d'un client sur un vol passager");
                    supprimerReservationVolPassager(conn);
                    break;
                case 4:
                    System.out.println("\nSupprimer la réservation d'un client sur un vol de fret");
                    supprimerReservationVolFret(conn);
                    break;
                case 5:
                    System.out.println("\nSupprimer une hotesse");
                    supprimerHotesse(conn);
                    break;
                case 6:
                    System.out.println("\nSupprimer un pilote");
                    supprimerPilote(conn);
                    break;
                case 7:
                    AirChance.menu();
                    exit = true;
                    break;
                default:
                    System.out.println("=> Choix incorrect");
                    AirChance.menu();
            }
        }
    }
    
    Suppression() {
        
    }

    /**
     * supprimerVolPassager effectue les opérations nécessaires à la suppression
     * d'un vol de passagers. En l'occurence, il s'agit de supprimer un vol, d'y
     * supprimer les hotesses et ensuite les pilotes.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolPassager(Connection conn) throws SQLException, ParseException {
        PreparedStatement stmt;
        Vector listeVols = new Vector();
        Scanner sc;
        int NumVolP;
        int NumVolP_Supprime;
        String DateVolP;

        try {
            //Suppression du nouveau vol
            System.out.println("Veuillez sélectionner le vol à supprimer parmi la liste disponible :");

            stmt = conn.prepareStatement("Select NumVolP, DateVolP from VolsPassagers order by NumVolP");

            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                //Affichage de la liste des vols de passagers
                NumVolP = Integer.parseInt(resultat.getString("NumVolP"));
                DateVolP = resultat.getDate("DateVolP") + "";
                System.out.println("Numéro de vol : " + NumVolP + " Date : " + DateVolP);
                listeVols.add(NumVolP);
            }

            System.out.print("\n");

            NumVolP_Supprime = LectureClavier.lireEntier("Numéro du vol à supprimer : \n");
            
            sc = new Scanner(System.in);

            //Vérification du vol
            while (!volExistant(NumVolP_Supprime, listeVols)) {
                NumVolP_Supprime = sc.nextInt();
            }

            System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
            DateVolP = LectureClavier.lireChaine();
            
            //Vérification de la date
            while (!isDateValid(DateVolP)) {
                System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
                DateVolP = LectureClavier.lireChaine();
            }

            /* Choix du niveau d'isolation */
            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
            
            supprimerVolPassager_AffectationH(conn, Integer.toString(NumVolP_Supprime));

            // Suppression du vol si les autres suppressions se sont bien déroulées
            stmt = conn.prepareStatement("Delete from VolsPassagers"
                    + " Where NumVolP = ?"
                    + " And trunc(DateVolF) = to_date(?, 'DD-MON-YY')");

            stmt.setInt(1, NumVolP_Supprime);
            stmt.setString(2, DateVolP);

            stmt.executeQuery();

            // Finalement on valide la transaction
            conn.commit();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression du vol de passager a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerVolFret effectue les opérations nécessaires à la suppression
     * d'un vol de fret.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolFret(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listeVols = new Vector();
        Scanner sc;
        int NumVolF;
        String DateVolF;
        int NumVolF_Supprime;

        try {
            //Suppression du nouveau vol
            System.out.println("Veuillez sélectionner le vol à supprimer parmi la liste disponible :");

            stmt = conn.prepareStatement("Select NumVolF, DateVolF from VolsFret order by NumVolF");

            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                //Affichage de la liste des vols de fret
                NumVolF = Integer.parseInt(resultat.getString("NumVolF"));
                DateVolF = resultat.getDate("DateVolF") + "";
                System.out.println("Numéro de vol : " + NumVolF + " Date : " + DateVolF);
                listeVols.add(NumVolF);
            }

            System.out.print("\n");

            NumVolF_Supprime = LectureClavier.lireEntier("Numéro du vol à supprimer : \n");
            System.out.print("\n");
            
            sc = new Scanner(System.in);

            //Verification du vol
            while (!volExistant(NumVolF_Supprime, listeVols)) {
                NumVolF_Supprime = sc.nextInt();
            }

            System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
            DateVolF = LectureClavier.lireChaine();
            
            //Vérification de la date
            while (!isDateValid(DateVolF)) {
                System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
                DateVolF = LectureClavier.lireChaine();
            }

            /* Choix du niveau d'isolation */
            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
            
            supprimerVolFret_ResaFret(conn, NumVolF_Supprime, DateVolF);

            // Suppression du vol si les autres suppressions se sont bien déroulées
            stmt = conn.prepareStatement("Delete from VolsFret"
                    + " Where NumVolF = ?"
                    + " And trunc(DateVolF) = to_date(?, 'DD-MON-YY')");

            stmt.setInt(1, NumVolF_Supprime);
            stmt.setString(2, DateVolF);

            stmt.executeQuery();

            // Finalement on valide la transaction
            conn.commit();
            
            System.out.println("Le vol a bien été supprimé.");

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression du vol de fret a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * supprimerReservationVolFret effectue les opérations nécessaires à la suppression
     * d'une réservation sur un vol de fret.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerReservationVolFret(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listeVols = new Vector();
        Vector listeResa = new Vector();
        Scanner sc;
        int NumVol;
        String DateVol;
        int numResa;
        int numResaF;
        int NumVolF_Supprime;

        try {
            //Suppression d'une réservation d'un vol de fret
            numResa = LectureClavier.lireEntier("Quel est votre numéro de réservation ?");
            
            stmt = conn.prepareStatement("Select NumResa from ResaFret");

            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                numResaF = Integer.parseInt(resultat.getString("NumResa"));
                listeResa.add(numResaF);
            }
            
            sc = new Scanner(System.in);
            
            //Vérification de la réservation
            while (!resaExistante(numResa, listeResa)) {
                numResa = sc.nextInt();
            }

            stmt = conn.prepareStatement("Select NumVol, DateVol from ResaFret Where numResa = " + numResa
                    + " order by NumVol");

            resultat = stmt.executeQuery();
            while (resultat.next()) {
                //Affichage de la liste des vols de fret
                NumVol = Integer.parseInt(resultat.getString("NumVol"));
                DateVol = resultat.getDate("DateVol") + "";
                System.out.println("Numéro de vol : " + NumVol + " Date : " + DateVol);
                listeVols.add(NumVol);
            }

            System.out.print("\n");

            NumVolF_Supprime = LectureClavier.lireEntier("Numéro du vol à supprimer : \n");
            System.out.print("\n");
            
            sc = new Scanner(System.in);

            //Verification du vol
            while (!volExistant(NumVolF_Supprime, listeVols)) {
                NumVolF_Supprime = sc.nextInt();
            }

            System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
            DateVol = LectureClavier.lireChaine();
            
            //Vérification de la date
            while (!isDateValid(DateVol)) {
                System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
                DateVol = LectureClavier.lireChaine();
            }

            supprimerVolFret_ResaFret(conn, NumVolF_Supprime, DateVol);

            // Finalement on valide la transaction
            conn.commit();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression du vol de fret a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * supprimerHotesse effectue les opérations nécessaires à la suppression
     * d'une hotesse libre.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerHotesse(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listeHotesses = new Vector();
        Scanner sc;
        boolean requeteVide = true;
        int numPersoH;
        String nomH;
        String prenomH = "";

        try {
            stmt = conn.prepareStatement("Select NumPersoH, NomH, PrenomH From Hotesses"
                    + " Where NumPersoH not in (Select NumPersoH From AffectationH)"
                    + " Order By NumPersoH");
            
            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                requeteVide = false;
                //Affichage de la liste des hotesses libres
                numPersoH = Integer.parseInt(resultat.getString("NumPersoH"));
                nomH = resultat.getString("NomH");
                prenomH = resultat.getString("PrenomH");
                System.out.println("Numéro : " + numPersoH + "\n"
                        + "Nom : " + nomH + "\n"
                        + "Prénom : " + prenomH + "\n");
                listeHotesses.add(numPersoH);
            }
            
            if(requeteVide) {
                System.out.println("Aucune hotesse n'est disponible.");   
            }
            else {
                numPersoH = LectureClavier.lireEntier("Numéro de l'hotesse à supprimer : \n");
                System.out.print("\n");
                
                sc = new Scanner(System.in);
                
                //Verification de l'hotesse
                while (!hotesseExistante(numPersoH, listeHotesses)) {
                    numPersoH = sc.nextInt();
                }

                /* Choix du niveau d'isolation */
                conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
                
                stmt = conn.prepareStatement("Delete from Hotesses Where NumPersoH = " + numPersoH);
                stmt.executeQuery();
            } 
            
            // Finalement on valide la transaction
            conn.commit();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de l'hotesse a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * supprimerPilote effectue les opérations nécessaires à la suppression
     * d'un pilote libre.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerPilote(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listePilotes = new Vector();
        Scanner sc;
        boolean requeteVide = true;
        int numPersoP;
        String nomP;
        String prenomP = "";

        try {
            stmt = conn.prepareStatement("Select NumPersoP, NomP, PrenomP From Pilotes"
                    + " Where NumPersoP not in (Select NumPersoP From AffectationP)"
                    + " Order By NumPersoP");
            
            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                //Affichage de la liste des pilotes libres
                requeteVide = false;
                numPersoP = Integer.parseInt(resultat.getString("NumPersoP"));
                nomP = resultat.getString("NomP");
                prenomP = resultat.getString("PrenomP");
                System.out.println("Numéro : " + numPersoP + "\n"
                        + "Nom : " + nomP + "\n"
                        + "Prénom : " + prenomP + "\n");
                listePilotes.add(numPersoP);
            }

            if(requeteVide) {
                System.out.println("Aucun pilote n'est disponible.");   
            }
            else {
                numPersoP = LectureClavier.lireEntier("Numéro du pilote à supprimer : \n");
                System.out.print("\n");
                
                sc = new Scanner(System.in);
                
                //Verification du pilote
                while (!piloteExistant(numPersoP, listePilotes)) {
                    numPersoP = sc.nextInt();
                }

                /* Choix du niveau d'isolation */
                conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
                
                /* Suppression de la qualification de ce pilote */
                supprimerQualification(conn, numPersoP);
                
                stmt = conn.prepareStatement("Delete from Pilotes Where NumPersoP = " + numPersoP);
                stmt.executeQuery();
            } 
            
            // Finalement on valide la transaction
            conn.commit();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de l'hotesse a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerReservationVolPassager effectue les opérations nécessaires à la
     * suppression d'une réservation sur un vol de passagers.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerReservationVolPassager(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listeVols = new Vector();
        Vector listePlaces = new Vector();
        Vector listeResa = new Vector();
        Scanner sc;
        int numVolP;
        int numClient;
        int NumVolP_Supprime;
        int numPlace;
        int numResa;
        String dateVolP;

        try {
            //Suppression d'une réservation
            System.out.println("\n");
            numClient = LectureClavier.lireEntier("Veuillez renseigner votre numéro client :\n");

            stmt = conn.prepareStatement("Select NumVolP, DateVolP, numPlace, numResa From ResaPassager"
                    + " Natural Join Reservation"
                    + " Natural Join Client"
                    + " Where numClient = " + numClient);

            ResultSet resultat = stmt.executeQuery();
            while (resultat.next()) {
                //Affichage de la liste des vols de passagers du client
                numVolP = Integer.parseInt(resultat.getString("NumVolP"));
                dateVolP = resultat.getDate("DateVolP") + "";
                numPlace = resultat.getInt("numPlace");
                numResa = resultat.getInt("numResa");
                System.out.println("Numéro de vol : " + numVolP + " Date : " + dateVolP);
                listeVols.add(numVolP);
                listePlaces.add(numPlace);
                listeResa.add(numResa);
            }

            NumVolP_Supprime = LectureClavier.lireEntier("Numéro du vol à supprimer : \n");
            
            sc = new Scanner(System.in);
            
            //Verification du vol
            while (!volExistant(NumVolP_Supprime, listeVols)) {
                NumVolP_Supprime = sc.nextInt();
            }

            System.out.println("Date du vol à supprimer (format DD-MON-YY) :");
            dateVolP = LectureClavier.lireChaine();
            
            //Vérification de la date
            while (!isDateValid(dateVolP)) {
                System.out.println("Date du vol à supprimer (format DD-MON-YY) :\n");
                dateVolP = LectureClavier.lireChaine();
            }

            numPlace = LectureClavier.lireEntier("Numéro de la place à supprimer : ");
            System.out.print("\n");
            
            //Vérification de la place
            while (!placeExistante(numPlace, listePlaces)) {
                numPlace = sc.nextInt();
            }

            numResa = LectureClavier.lireEntier("Numéro de la réservation à supprimer : ");
            System.out.print("\n");
            
            //Vérification de la réservation
            while (!resaExistante(numResa, listeResa)) {
                numResa = sc.nextInt();
            }

            supprimerReservationVolPassager_ResaPassager(conn, NumVolP_Supprime, dateVolP, numPlace, numResa);

            if (!countResa(conn, numResa)) {
                // Suppression de la réservation sur le vol donné si les autres suppressions se sont bien déroulées
                stmt = conn.prepareStatement("Delete from Reservation Where NumResa = " + numResa);
                resultat = stmt.executeQuery();
            }

            // Finalement on valide la transaction
            conn.commit();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression du vol de passager a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerReservationVolPassager_ResaPassager effectue les opérations
     * nécessaires à la suppression d'une réservation.
     *
     * @param conn : Connexion à la base de donnée
     * @param NumVolP : Numero du vol de passagers
     * @param dateVolP : Date du vol de passagers
     * @param numPlace : Numero de place de la réservation
     * @param numResa : Numero de la réservation
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerReservationVolPassager_ResaPassager(Connection conn, int NumVolP_Supprime, String dateVolP, int numPlace, int numResa) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        /* Suppression de la réservation selon les paramètres fournis */
        try {
            stmt = conn.prepareStatement("Delete from ResaPassager"
                    + " Where NumVolP = " + NumVolP_Supprime
                    + " And trunc(DateVolP) = to_date(?, 'DD-MON-YY')"
                    + " And NumPlace = " + numPlace
                    + " And NumResa = " + numResa);

            stmt.setString(1, dateVolP);
            stmt.executeQuery();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de la réservation a rencontré une erreur");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerVolFret_ResaFret effectue les opérations nécessaires à la
     * suppression de la réservation du vol de fret.
     *
     * @param conn : Connexion à la base de donnée
     * @param NumVolF_Supprime : Vol à supprimer
     * @param DateVolF : Date du vol à supprimer
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolFret_ResaFret(Connection conn, int NumVolF, String DateVolF) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from ResaFret"
                    + " Where NumVol = ?"
                    + " And trunc(DateVol) = to_date(?, 'DD-MON-YY')");

            stmt.setInt(1, NumVolF);
            stmt.setString(2, DateVolF);

            stmt.executeQuery();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de la réservation a rencontré une erreur");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * supprimerQualification effectue les opérations nécessaires à la
     * suppression de la qualification d'un pilote libre.
     *
     * @param conn : Connexion à la base de donnée
     * @param numPersoP : Numéro du pilote
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerQualification(Connection conn, int numPersoP) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from Qualification"
                    + " Where NumPersoP = ?");

            stmt.setInt(1, numPersoP);
            stmt.executeQuery();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de la qualification a rencontré une erreur");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerVolPassager_AffectationH effectue les opérations nécessaires à
     * la suppression du personnel d'un vol de passagers. En l'occurence, il
     * s'agit de supprimer une hotesse.
     *
     * @param conn : Connexion à la base de donnée
     * @param NumVolP_Supprime : Vol à supprimer
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolPassager_AffectationH(Connection conn, String NumVolP_Supprime) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from AffectationH"
                    + " Where NumVol = " + NumVolP_Supprime);

            stmt.executeQuery();

            supprimerVolPassager_AffectationP(conn, NumVolP_Supprime);

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression de l'hotesse affecté au vol a rencontré une erreur");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerVolPassager_AffectationP effectue les opérations nécessaires à
     * la suppression du personnel d'un vol de passagers. En l'occurence, il
     * s'agit de supprimer un pilote.
     *
     * @param conn : Connexion à la base de donnée
     * @param NumVolP_Supprime : Vol à supprimer
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolPassager_AffectationP(Connection conn, String NumVolP_Supprime) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from AffectationP"
                    + " Where NumVol = " + NumVolP_Supprime);

            stmt.executeQuery();

            supprimerVolPassager_ResaPassager(conn, NumVolP_Supprime);

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression du pilote affecté au vol a rencontré une erreur");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * supprimerVolPassager_ResaPassager effectue les opérations nécessaires à
     * la suppression du personnel d'un vol de passagers. En l'occurence, il
     * s'agit de supprimer les réservations du vol.
     *
     * @param conn : Connexion à la base de données
     * @param NumVolP_Supprime : Vol à supprimer
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolPassager_ResaPassager(Connection conn, String NumVolP_Supprime) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from ResaPassager"
                    + " Where NumVolP = " + NumVolP_Supprime);

            stmt.executeQuery();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression des réservations a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * supprimerVolPassager_ResaPassager effectue les opérations nécessaires à
     * la suppression du personnel d'un vol de passagers. En l'occurence, il
     * s'agit de supprimer les réservations du vol.
     *
     * @param conn : Connexion à la base de données
     * @param NumVolP_Supprime : Vol à supprimer
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void supprimerVolFret_ResaFret(Connection conn, String numVol) throws SQLException {
        PreparedStatement stmt;

        System.out.print("\n");

        try {
            stmt = conn.prepareStatement("Delete from ResaFret"
                    + " Where NumVolF = " + numVol);

            stmt.executeQuery();

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La suppression des réservations a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static boolean volExistant(int NumVolP_Supprime, Vector listeVols) {
        Boolean existe = false;

        if (listeVols.contains(NumVolP_Supprime)) {
            existe = true;
        } else {
            System.out.println("Ce vol n'existe pas dans la base de données, veuillez sélectionner un vol existant.");
        }
        return existe;
    }

    public static boolean countResa(Connection conn, int numResa) throws SQLException {
        Boolean Resa = true;
        PreparedStatement stmt;
        int i;

        try {
            stmt = conn.prepareStatement("Select count(*) as sommeResa From ResaPassager Where NumResa = " + numResa);

            ResultSet resultat = stmt.executeQuery();
            resultat.next();

            if (resultat.getInt("sommeResa") == 0) {
                System.out.println("Il n'y a plus de réservation pour ce numéro.");
                Resa = false;
            } else {
                System.out.println("Il reste des réservations pour ce client.");
                Resa = true;
            }

        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("Le comptage des réservations a rencontré une erreur");
            System.out.println(ex.getErrorCode());
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Resa;
    }

    public static boolean isDateValid(String date) {
        boolean evaluer = false;
        
        String datePattern = "\\d{1,2}-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-(\\d{2}|d{4})";
        evaluer = date.matches(datePattern);

        String msg = date + " : Format Date invalide";

        if (evaluer) {
            msg = date + " : Format Date valide";
        }

        System.out.println(msg + "");
        return evaluer;
    }
    
    public static boolean placeExistante(int numPlace, Vector listePlaces) {
        Boolean existe = false;

        if (listePlaces.contains(numPlace)) {
            existe = true;
        } else {
            System.out.println("Cette place n'est pas dans votre réservation, veuillez sélectionner une place valide.");
        }
        return existe;
    }
    
    public static boolean resaExistante(int numResa, Vector listeResa) {
        Boolean existe = false;

        if (listeResa.contains(numResa)) {
            existe = true;
        } else {
            System.out.println("Cette réservation n'est pas à votre nom ou n'existe pas,"
                    + " veuillez sélectionner une réservation valide.");
        }
        return existe;
    }
    
    public static boolean hotesseExistante(int numPersoH, Vector listeHotesse) {
        Boolean existe = false;

        if (listeHotesse.contains(numPersoH)) {
            existe = true;
        } else {
            System.out.println("Cette hotesse n'est pas disponible ou n'existe pas,"
                    + " veuillez sélectionner une autre hotesse.");
        }
        return existe;
    }
    
    public static boolean piloteExistant(int numPersoP, Vector listePilote) {
        Boolean existe = false;

        if (listePilote.contains(numPersoP)) {
            existe = true;
        } else {
            System.out.println("Ce pilote n'est pas disponible ou n'existe pas,"
                    + " veuillez sélectionner un autre pilote.");
        }
        return existe;
    }
}
